package com.myk.game.gobangchess.ai.symmetric;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

/**
 * GameStatePrinter 类提供了用于在控制台打印 GameState 详细信息的静态方法。
 * 这是一个公共功能，可被任何需要调试或展示游戏状态的模块调用。
 */
public class GameStatePrinter {

    /**
     * 格式化坐标列表，以便在控制台清晰地打印。
     * @param coords 坐标列表，每个坐标为 int[] {row, col}。
     * @return 格式化后的字符串，例如 "[[r1, c1], [r2, c2]]"。
     */
    private static String formatCoords(List<int[]> coords) {
        if (coords == null || coords.isEmpty()) {
            return "[]";
        }
        return coords.stream()
                .map(Arrays::toString)
                .collect(Collectors.joining(", "));
    }

    /**
     * 打印给定 GameState 对象中所有棋块的详细信息。
     * 对于黑白双方的每一个棋块，都会打印其大小、包含的棋子位置以及周围的空位坐标。
     *
     * @param state 要打印其详细信息的 GameState 对象。
     */
    public static void printAllBlockDetails(GameState state) {
        for (int color : new int[]{1, -1}) {
            String colorName = (color == 1) ? "黑方" : "白方";
            System.out.println("\n--- " + colorName + "棋块 (Color: " + color + ") ---");
            List<List<int[]>> blocks = state.allBlocks.get(color);
            if (blocks == null || blocks.isEmpty()) {
                System.out.println("无。");
                continue;
            }
            for (int i = 0; i < blocks.size(); i++) {
                System.out.println("棋块 " + i + ":");
                System.out.println("  大小: " + state.blockSizes.get(color).get(i));
                System.out.println("  棋子位置: " + formatCoords(state.allBlocks.get(color).get(i)));
                System.out.println("  周围空位: " + formatCoords(state.blockSurroundingPoints.get(color).get(i)));
            }
        }
    }
}